package com.tengju.support.domain.service;

import com.tengju.support.domain.model.wx.*;

import java.util.List;

public interface WeiXinCompanyService {

    /**
     * 创建部门
     */
    DepartmentId createDepartment(CreateDepartmentForm form);

    /**
     * 变更部门
     */
    Boolean updateDepartment(UpdateDepartmentForm form);

    /**
     * 删除部门
     */
    @Deprecated
    Boolean deleteDepartment(DepartmentId departmentId);

    /**
     * 获取部门列表
     */
    List<Department> getDepartmentList(DepartmentId parentDepartmentId);

    /**
     * 创建成员
     */
    Boolean createUser(CreateWechatUserForm form);

    /**
     * 删除成员
     */
    @Deprecated
    Boolean deleteUser(String userId);

    /**
     * 读取成员
     */
    WechatUser getUser(String userId);

    /**
     * 更新成员
     */
    Boolean updateUser(UpdateWechatUserForm form);

    /**
     * 获取部门成员
     */
    List<WechatSimpleUserInfo> getUserByDepartment(DepartmentId departmentId, FetchChild fetchChild);

    /**
     * 批量删除成员
     */
    @Deprecated
    Boolean batchDeleteByUserId(List<String> userIds);

    /**
     * 创建标签
     */
    TagId createTag(String tagName, TagId tagId);

    /**
     * 增加标签成员
     */
    Boolean addTagUsers(TagId tagId, List<String> userIds, List<DepartmentId> departmentIds);

    /**
     * 删除标签成员
     */
    Boolean deleteTagUsers(TagId tagId, List<String> userIds, List<DepartmentId> departmentIds);

    /**
     * 获取标签成员
     */
    TagUser getTagUsers(TagId tagId);

    /**
     * 创建群会话
     *
     * @param name    群会话名称
     * @param userIds 群成员
     * @return chatId
     */
    String createChat(String name, List<String> userIds);

    /**
     * 发送群会话消息
     *
     * @param chatid  群会话ID
     * @param content 消息内容
     * @return 是否成功
     */
    Boolean sendChatTextMsg(String chatid, String content);

    /**
     * 授权访问
     */
    UserSession codeToSession(String code);

}
